package com.wxzz.elearing.course.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wxzz.elearing.course.dto.*;
import com.wxzz.elearing.course.entity.CurriculumSectionTopic;
import com.wxzz.elearing.course.entity.Exam;
import com.wxzz.elearing.course.entity.WxUserExam;
import com.wxzz.elearing.course.entity.WxUserExamHistory;
import com.wxzz.elearning.common.vo.JgPageVo;
import com.wxzz.elearning.common.vo.ReturnVO;

import java.util.List;

public interface IExamServiceService extends IService<Exam> {

    /**
     * 根据企业id查询在线考试列表(后台)
     *
     * @param enterpriseId
     * @return
     */
    ReturnVO<JgPageVo<List<Exam>>> listExamByEnterpriseId(Long enterpriseId, ExamDto examDto);

    /**
     * 添加考试(后台)
     *
     * @param exam
     * @return
     */
    ReturnVO saveExam(Exam exam);

    /**
     * 删除考试
     *
     * @param examId
     * @return
     */
    ReturnVO deleteExam(Long examId);

    /**
     * 查询考试详情(后台)
     */
    ReturnVO selectExamDetailById(Long examId);

    /**
     * 根据考试id查询考试人员(后台)
     *
     * @return
     */
    ReturnVO<JgPageVo<List<WxUserExam>>> selectWxUserExamByExamId(WxUserExamByExamIDto wxUserExamByExamIDto);

    /**
     * 分配考试人(后台)
     *
     * @param wxUserExamInsDto
     * @return
     */
    ReturnVO saveWxUserExam(WxUserExamInsDto wxUserExamInsDto);

    /**
     * 查询该用户的在线考试(小程序)
     *
     * @param wxUserId
     * @param examByWxUserIdDto
     * @return
     */
    ReturnVO<JgPageVo<List<Exam>>> listExamByWxUserId(Long wxUserId, ExamByWxUserIdDto examByWxUserIdDto);

    /**
     * 列出在线考试记录
     *
     * @param wxUserId
     * @return
     */
    ReturnVO<List<WxUserExamHistory>> listExamByExamHistory(Long wxUserId, Long examId);

    /**
     * 在线考试测试完毕时调用(小程序)
     *
     * @param wxUserId
     * @param examIsPassDto
     * @return
     */
    ReturnVO<WxUserExamHistory> examIsPass(Long wxUserId, ExamIsPassDto examIsPassDto);

    /**
     * 根据考试记录id查询题目记录(小程序)
     *
     * @param wxUserExamHistoryId
     * @return
     */
    ReturnVO<List<CurriculumSectionTopic>> selectCurriculumSectionTopicByExamHistoryId(Long wxUserExamHistoryId);

    /**
     * 展示我的考试记录(小程序)
     *
     * @param wxUserId
     * @param wxUserExamHistoryDto
     * @return
     */
    ReturnVO<JgPageVo<List<WxUserExamHistory>>> wxListWxUserExamHistory(Long wxUserId, WxUserExamHistoryDto wxUserExamHistoryDto);

    /**
     * 查询考试绑定的用户(远程调用)
     *
     * @param examId
     * @param wxUserIds
     * @return
     */
    ReturnVO<List<JSONObject>> selectWxUserExam(Long examId, List<Long> wxUserIds);
}
